/**   
 * @文件名： ReflectSingleton.java 
 * @包名： com.pattern.singleton 
 * @描述： TODO(用一句话描述该文件做什么) 
 * @作者： acl
 * @创建日期： 2016年7月5日 下午11:26:52 
 * @版本： V1.0   
 */
package com.pattern.singleton;

import java.io.ObjectStreamException;
import java.io.Serializable;

/** 
 * @类名： ReflectSingleton 
 * @描述： 测试单例模式（如何防止反射和序列化漏洞）
 * @author： acl
 * @创建日期： 2016年7月5日 下午11:26:52 
 *  
 */
public class ReflectSingleton implements Serializable {
	private static ReflectSingleton instance = new ReflectSingleton();

	private ReflectSingleton() {
		//抛出异常防止反射破解单例模式
		if (instance != null) {
			throw new RuntimeException();
		}
	}

	public static ReflectSingleton getInstance() {
		return instance;
	}
	
	//反序列话时，直接调用该方法返回对象，而不需要返回新的对象。
	private Object readResolve() throws ObjectStreamException{
		return instance;
	}
}
